q21ubfandomcom-20200214-history
How does Pandora differentiate my musical taste?
=Short Answer= ---- Pandora is probably the most famous web radio of Internet. It was founded in the far 2000, and it has changed a lot in last 13 years, transforming its appearance and adding new features, but the main mission has remained the same: To play only music you’ll like 4. The way it works is simple: the user creates a radio station, indicating an artist/band he likes, and Pandora starts streaming songs it guesses the user probably will like. This guess is not just the throw of a dice: it is the result of a complex and very efficient algorithm executed every time a song has to be selected. This algorithm takes essentially two inputs: the user’s profile and the music catalog. The user’s profile is actually a per-radio-station profile. It is built dynamically: initialized with the creation of the radio station, when the user indicates an artist he likes, and updated every time the user gives a feedback. There exist three kinds of feedback: station seeds, a list of artists and bands the user likes, thumbed-up tracks, list of tracks the user likes, and thumbed-down tracks, list of tracks the user does not like. The station seeds list is created together with the radio station and populated every time the user types in a specific section the name of an artist or band he likes. On the other side, thumbs-up and thumbs-down can be given by the user while listening to a specific song. It is important to mention that the user/per-station profile is built on the base of the user’s explicit feedback. The user has to say Pandora explicitly he likes a certain artist or band in order for the station seeds to be updated. Similarly, he has to thumb-up or down a song explicitly in order to add it to the list. Without the feedback of the user, Pandora recommendation mechanism cannot function properly, not having any information on how to select songs to recommend. The second input to the song-selection engine is the music catalog. It is very interesting to explore it and understand how it is built because it is at the heart of Pandora recommendation system and makes it unique. Pandora is a content-based recommendation system: it means that suggestions are not based on users’ similarities, but on songs similarities and how users’ profiles match songs’ profiles. The huge database of songs’ profiles is built by the Music Genome Project, the most sophisticated taxonomy of musical information ever collected[ 4]. Every day, teams of experts and trained musicians listen to hundreds of songs and assign each of them approximately 400 attributes (up to 450 attributes). The idea is that these attributes should describe everything of the song, from the melody to the harmony, from the rhythm to the instrumentation, from the form to the vocal performance. They are more or less like our body’s genes, which describe all the characteristics that make us unique and different from the others. The name of the Music Genome Project comes from this idea: songs are like humans, they are described by a huge but finite set of attributes, like we are described by a huge but finite set of genes. Goal of the project is finding the right 400 values for each song, so to come out with a big set of unique profiles that are given as input to the music selection algorithm. This is a really ambitious objective: it is not easy to keep high both the quality and the variety, considering that each song takes about 20-30 minutes to be classified. In fact, Pandora suffers of a scalability problem. We will come back to this point in a while. Given these two different kinds of inputs, the user’s profile from one side and the music catalog on the other, goal of the music recommendation algorithm is finding the song whose profile best matches the user’s profile, and that song will be the next one played by the web radio. It is easy to say, but very difficult to implement. Many are the challenges that have to be faced and the properties that should be satisfied. First of all, the accuracy. It means that the algorithm should suggest the user some music he will certainly like, or will like with a very high probability. Without this property, the user will probably get bored soon, and maybe become customer of some competitors. The second important property is the speed. If the algorithm is not fast, the user experience will not be sufficiently good, even with the highest level of accuracy. This is maybe the most challenging goal, for the algorithm is executed very often, that is every time a song ends or the user skips the current one. It is still possible to perform some kind of pre-processing, running the selection algorithm just when the user changes his profile, adding or removing some information (seeds or thumbs-up/down). Despite this, it cannot be ignored that executing a single run of the algorithm involves a search over a huge database of songs and users’ profile, so that it becomes crucial to process this large amount of data as fast as possible and with the best level of accuracy. Pandora’s algorithm succeeds in doing its jobs, and does it pretty well, but it suffers of one main problem: it does not scale well. Being based on humans’ work, the number of songs that can be classified daily, or even monthly, is limited. For this reason, Pandora’s teams have to make some choices on which songs classify and which ones have to be taken out from the music classification process. This limits the variety of the music proposed, and it can be considered as Pandora’s Achilles’ heel. Indeed, trying to go beyond humans’ limit, forcing people to work harder and faster, could decrease the quality dramatically. Many people get bored after listening Pandora for one or two hours because it repeats the same songs of the same artists, again and again. It is very difficult to discover new music with Pandora, at least for the most “hardcore” users. The only solution to this problem is adding less-known music to the database, so to increase originality and variety. In this regard, many proposals have been done, but no one offers sufficient guarantees of quality and success. Automatic classification using programs is one of them, but the artificial intelligence has not yet reached such a level of understanding of the human mind and the way it classifies music. Another possibility is to allow other users to contribute in songs classification, but it is not trivial to distinguish trustworthy contributors from malicious ones. In the section “Advanced Material”, we will come back to this point and we will analyze how it is possible to incorporate some metrics of variety in a music recommendation system. But now let’s get back to the main topic of the discussion: how does Pandora’s algorithm work? In order to understand it completely, we have to go through the main music recommendation systems and analyze their main characteristics and similarities, as well as their differences. =Long Answer= ---- Before we go into details of specific recommendation methods, let’s first see the generalized view of the process. The recommendation problem can generally be divided into two sub-problems: 1. Prediction problem: This sub-problem tries to estimate the likeliness of an item for a particular user. Let's denote U = \lbrace u_1, u_2 ,\ldots , u_m \rbrace as the set of users and S = \lbrace s_1, s_2, \ldots , s_n \rbrace as the set of songs. Also S_{u_i} is the set of songs the that user u_i has already experienced. Then we want to predict the likeliness P_{u_i,s_j} of a song s_j for an user u_i , for each s_j \notin S_{u_i} . 2. Recommendation problem: After predicting the likeliness, next step is to suggest the user a list S_r of N songs that the user could like most. These are the songs with highest P_{u_i,s_j} values in from the previous step. The list of songs Sr has to be such that it includes only new songs, i.e., S_r \cap S_{u_i} = \emptyset . In recommending new songs for the users, the recommendation system exploits the user preferences from the user profile. The way of exploiting the user preference leads to four different kinds of recommendation methods: Demographic filtering, Collaborative filtering, Content based filtering, and Context based filtering. Demographic Filtering This method is based on finding the stereotypical users those like a particular singer. Each user is associated with a cluster based on some personal data, geographic data and psychographic data. It is assumed that all the cluster members would like similar kind of songs. So cluster members are recommended songs from the same band, genre, etc. One example of this kind is the Grundy books recommendation system that used some personal information of the user to recommend books. One of the major drawbacks of demographic filtering is that it is too general to satisfy individual users preferences. All the members of the same country or same age may not like the same kind of songs. As a result, this system isn’t much popular, though it’s the simplest one. Collaborative Filtering Collaborative filtering exploits past user-song relationships in predicting the user's preference for songs. That is, users give feedback to the recommendation system regarding their liking and disliking. These past user-song interactions are then analyzed to discover the relationships among users and songs. Collaborative filtering exploits the similarity among users and songs. Two similar songs or two similar users are called neighbors. After building the neighborhood, this method computes the recommendation list for user. This method first builds a user song interaction matrix R_{m \times n} , where m is the number of users and n is the number of total songs. Each of the m rows represents a user's profile and each of the n columns represents a song's description. The element R_{u_i,s_j} is the rating of user u_i for the song s_j . The elements that are marked as " ? " in the matrix are the ratings to be predicted by the recommendation system. Two types of similarity metrics are used by collaborative filtering to predict users' preferences, item-based similarity and user-based similarity. I. Item-Based Neighborhood Two songs are similar if they got similar ratings from the user. Also, they are more probable to get similar ratings from the same user. When a user u ’s rating is to be predicted for a song i that is called active song, the method first calculates the similarity between active song and the set of songs that the user has already rated. So the first step is to find the similarity between two songs i and j . If we consider the item description column of each user as a vector in m dimensional plane, we can find the similarity between two songs using the cosine similarity. sim(i,j) = cos(\textbf{i}, \textbf{j}) = \frac {\textbf{i} \cdot \textbf{j}} {\lVert i \rVert * \lVert j \rVert} = \frac {\sum_{u \in U} r_{u,i} r_{u,j}} {\sqrt{\sum_{u \in U} r_{u,i}^2} \sqrt{\sum_{u \in U} r_{u,j}^2}} where U is the set of users that rated both songs i and j . The smaller the cosine of the angle between the vectors is, the more similar the corresponding songs are, and this implies that they received similar ratings from the users. Once the similarity calculation is done, next step is to predict a rating for the active item i to user u . This method uses the weighted sum of the user’s ratings for the first k neighbors, where the weights are the normalized similarity values of the neighbors. \hat{r}_{u,i} = \frac {\sum_{j \in S^k (i;u)} sim(i,j) r_{u,j}} {\sum_{j \in S^k (i;u)} sim(i,j)} II. User-Based Neighborhood Two users are similar if they have rated the songs similarly. Now we can treat the two users' profiles as n dimensional vectors and calculate the cosine similarity between them. Then the predicted rating for song i by user u is given as follows: \hat{r}_{u,i} = \bar{r}_u + \frac {\sum_{v \in S^k(u)} sim(u,v) (r_{v,i} - \bar{r}_{v})} {\sum_{v \in S^k(u)} sim(u,v)} Where \bar{r}_u is the average rating of the user u . The problem with collaborative filtering is that the users-songs interaction matrix is very large and sparse because the number of songs is huge and each user rates only few songs. So sometimes it is difficult to find sufficient number of reliable neighbors to predict a user's rating. Besides, when a new user or song is added to the matrix, it does not have enough ratings to be considered as neighbor. This is called the cold start problem. Another issue in collaborative filtering is that it does not take into account the content description of the song. It only aggregates the opinions of similar users, thus leading to recommending popular items for most of the time. So, it does not explore the long tail of the distribution of less popular songs which could bring novelty and yet good experience to the users. Content-Based Filtering This recommendation method relies on items’ classification based on their content. It first extracts the audio features within a track, such as melody, harmony, bass, tempo, etc. 3 and put them in a vector. After that, the song's description is matched with the user's preference to predict the rating of an active song to a target user. The songs' characterization can be done either automatically by softwares (used by Mufin) or manually by music experts (used by Pandora). Once the songs are characterized, each song has a vector of attributes (around 400 for Pandora). To suggest a list of songs to the target user, a set of similar songs are determined first. The similarity function is based on the distance between the attributes' vectors. If we are to find similarity between two songs x and y , each with n attributes, we first compute their distance using one of the following formulae. d(x,y) = \sqrt{\displaystyle\sum_{i=1}^{n} (x_i - y_i)^2} d(x,y) = \displaystyle\sum_{i=1}^{n} \vert x_i - y_i \vert d(x,y) = \max_{i = 1 \ldots n} \vert x_i - y_i \vert Where the first distance is called Euclidean, the second Manhattan, and the third Chebychev. The less the distance between two songs, the more similar the two songs are. This inverse relationship between distance and similarity can be put in a simple equation as follows: Sim(i,j) = \frac{1}{1 + d(i,j)} Where k could be any proportionality constant. The content based filtering does not solve the cold start problem. The recommendation system needs to gradually adapt to the user's preferences. In addition, there could be a novelty problem. If the algorithm is accurate enough, it only recommends songs that are too similar to the user's preferences. Another important issue is that this method does not consider social information (i.e., past user-song interactions) to compute similarity. As a result, we may sometimes block the propagation of some popular songs among the users. Hybrid Recommendation The purpose of hybrid method is to exploit the advantages of the previous methods to make better recommendations. There could be several ways in which hybrid recommendation methods are built: a. Weighted: This method takes the linear combination of individual methods. For example, if the rating from collaborative filtering is \hat{r}_1 and rating from content based filtering is \hat{r}_2 , the hybrid rating could be formulated as \hat{r} = \alpha \cdot \hat{r}_1 + (1 - \alpha) \cdot \hat{r}_2 Where the parameter α could be tuned to prioritize one of the two ratings. b. Cascaded: This method passes the output of one method to the input of another method to refine the output. c. Switching: If the results from one method are not good enough, the system changes the method =Advanced Material= ---- Many years ago, before Internet was born, CDs shops were the main the places where people used to meet and discuss about music and the best album available. Usually, in those music shops, the seller was very informed about music, released albums, rankings, so he used to give advice to the most intimate customers. Due to the limited space on the shelves, a pre-selection of the CDs that will have been sold was necessary, so that only the items that passed that selection would have appeared for selling to customers. That was the first form of music recommendation. Nowadays, CDs shops are becoming less crowded. Many people prefer to consume music through Internet, instead of going to the shop and buying the CD. Moreover, the problem of lack of space there was with the old shop disappeared: Internet is a large music shop, with an almost “unlimited” number of shelves full of songs. Everything is available to the final user, so even more than in the past, he needs a music recommendation system that filters and select the best music. Unfortunately, the availability of any kind of music to anyone and anywhere has caused a problem: the market is ruled by few artists that have the main percentage of album sales and play counts, while there exists a huge number of small artist that are almost unknown. It is very difficult for them to emerge from the sea of music in which they are submerged, unless someone or something helps them to come out. That could be the role of a music recommendation system: helping those artists to get popularity, and at the same time, giving freshness and variety to the music recommendation. The Music Long Tail It is interesting to observe that if we graph the artists’ popularity against their rank, we obtain a long-tail distribution. What is exactly a long-tail distribution? There are two informal, non-mathematical definitions, both very interesting. The first one, by Chris Anderson, is: The Long Tail is about the economics of abundance; what happens when the bottlenecks that stand between supply and demand in our culture start to disappear and everything becomes available to everyone''. It states that when everything becomes available, two markets comes out, the head, that is the mass market, and the tail, that comprises all the unknown items ignored by the mass. The second definition is by Jason Foster: The Long Tail is the realization that the sum of many small markets is worth as much, if not more, than a few large markets. It emphasis the huge “length” of the tail, that includes the largest percentage of all the artists.'' Any music recommendation system, it does not matter if it is content-based, context-based or collaborative filtering, should exploit the long tail distribution of artists’ popularity and consider it as a core component of its recommendation engine. How can it be used? For example, suggesting songs compatible with user’s taste but not as famous as big hits. How we can define and represent mathematically the long tail? We will use the cumulative distribution function defined in 1. This function is: F(x) = \frac {\beta} {(\frac{N_{50}}{x})^\alpha + 1} Where α defines the S-shape of the function, β represents the total volume share and N50 is the number of object that cover half of the total volume (that is F(N50) = 50). This curve can be divided in three parts: head, mid, and tail. Mathematically, the borders between head and mid and between mid and tail are defined by the following equations: X_{head \rightarrow mid} = N_{50}^{2/3} X_{mid \rightarrow tail} = N_{50}^{4/3} \simeq X_{head\rightarrow mid}^2 If we want to describe the long tail through a probability distribution function, there are three main possible choices. POWER LAW DISTRIBUTION f(x) = ax^{-\gamma} γ represents how much the distribution is concentrated on the head. It means that with higher values of γ, the distribution will exhibit a thin tail and a short head with high probability value. POWER LAW DISTRIBUTION WITH EXPONENTIAL DECAY f(x) = x^{-\gamma} e^{-\lambda x} This pdf is characterized by the fact that until a certain threshold N (in the head and the mid) it follows a power-law distribution; over that threshold (in the tail) the exponential decay dominates. LOG-NORMAL DISTRIBUTION f(x) = \frac{1}{x} e^{-\frac{(ln(x)-\mu)^2} {2\sigma^2} } This distribution is concentrated in the head: it means that small values of x give the highest contribution to the total function. There is no right function among those three in absolute terms: every real world scenario will be best represented by one of those three models, and there exist techniques aimed to identify which one of them. Novelty and Relevance After modeling the long tail distribution, the next step is to incorporate it in the music recommendation system. How exactly? The idea is to give some more importance to those artists or songs residing in the tail of the distribution. But is this a good way to keep the user satisfaction high? Maybe most of the time, but not always. Sometimes the user wants to explore new horizons and find some new good band, sometimes he just wants to listen to the same songs he is affected to, again and again. The priority should be given to user’s satisfaction, whether it corresponds to suggesting new songs or not. In order to find the right balance, we need to define some metrics. We define LN as list of top-N recommended songs. Knows(u, i) is defined in this way: Knows(u,i) = \begin{cases} 1 & if\ user\ i\ knows\ song\ i\\ 0 & otherwise \end{cases} The first metric we define is the novelty: Novelty(u) = \frac{\sum_{i \in L_N} (1 - Knows(u,i))}{N} It represents the fraction of new songs among all the recommended songs. Another useful, specular metric is the familiarity: Familiarity(u) = 1 - Novelty(u) There is no right value for novelty. It should be kept sufficiently high to give variety to the system, but not over a certain threshold, for the user should be also familiar with some songs. Moreover, when a new song is suggested, the user should be given and explanation on why that song was recommended. Transparency very often means confidence in the system. In general, the novelty should be tuned so to adapt to the specific user and to the specific mood of that user in that day. In order to find the right balance, we define a second metric, the relevance. The relevance expresses how much a user enjoys the music that is proposed to him. Sometimes it is very difficult to quantify it because it can deviate totally from the profile and from the predictions, influenced by a particular mood. For this reason, it is fundamental to receive and interpret the feedbacks from the user, so to adjust relevance and consequently novelty. Recommending the Unknown What happens if we insert these two metrics into a recommendation system, like Pandora’s content-based filtering? We obtain something that graphically seems like the image below: In this picture, we can distinguish three main elements: • the long tail, already describe in details previously. • the songs’ graph: each node in the graph represents a song, and each song is connected to its neighbors, that is the most similar songs (in terms of attributes like Pandora, or in terms of users’ ratings like collaborative filtering systems). • the relevance of those songs to the user, represented by the height of the columns. Some columns are in grey: those songs belong to the user’s profile. The dashed line columns are instead the candidates for the next song to be played, and as we can see, songs that are in the tail of the distribution have higher relevance with respect to those in the head. We are pushing up the value of the novelty, in this case. This is just one of multiple ways in which music recommendation system can exploit the long tail distribution and promote less-known but more-valuable songs of artists submerged in the tail. The very important thing, at the end, is the user’s experience and satisfaction. This is what motivates all this discussion and the work that has been made on this topic. =Examples= ---- Here we illustrate the collaborative filtering method using both song-song similarity and user-user similarity. The following matrix is formed hypothetically to represent past user-song interactions. There are 40 ratings in the matrix out of which the bold face ratings will be predicted by the recommendation systems. So these bold faces will not be counted in the similarity computation. The rightmost column represents the average rating of individual users. In this example we will show the computation of predicted rating of song S_5 for user U_1 . Collaborative Filtering - Item-Based sim(S_1,S_5)= \frac{5 \times 3 + 4 \times 5 + 5 \times 5} {(\sqrt{5^2} + 4^2 + 5^2) (\sqrt{3^2} + 5^2 + 5^2)} = 0.962 In the same way we find similarities between song S_5 and all the other songs: sim(S_2,S_5)=0.99 sim(S_3,S_5)=0.975 It should be noted that we are not considering S_4 , because it has not been rated by user U_1 . Then we compute the predicted rating for song S_5 by user U_1 as following: r_{U_1, S_5}= \frac{5 \times 0.962 + 4 \times 0.99 + 4 \times 0.975} {0.96 + 0.99 + 0.975} = 4.33 Collaborative Filtering - User-Based sim(U_1,U_2)= \frac{4 \times 3 + 4 \times 5} {(\sqrt{4^2} + 4^2) \times (\sqrt{3^2} + 5^2)} = 0.971 In a similar way, we also calculate the similarity between user U_1 and all the other users that have rated item U_5 . sim(U_1,U_3) = 0.958 sim(U_1,U_4) = 1 sim(U_1,U_5) = 1 sim(U_1,U_6) = 1 sim(U_1,U_8) = 1 sim(U_1,U_{10}) = 1 Then we compute the rating prediction using the formula given in the item based similarity section above: r_{U_1,S_5} = \frac{0.971 \times 0 + 0.958 \times 0.33 + 1 \times 0 + 1 \times 0.67 + 1 \times 1.33 + 1 \times 0} {0.971 + 0.958 + 1 + 1 + 1 + 1 + 1}\ +\ 4.33 = 4.71 By comparing the above computations with the test value of 5, we see that the prediction error is less in user based neighborhood method. One obvious reason is that we have twice as many users as songs, and hence more neighbors that are similar to U_1 . So we get more accurate prediction here. Content-Based Filtering Suppose to have one user, Jack, who is creating a radio station in Pandora. He likes a lot Guns N' Roses, so he adds this band into the station seeds. Pandora, having only this information about Jack, starts streaming "Welcome to the jungle", and Jack, who really enjoys the song, thumbs it up. Now, suppose to have other 5 songs in Pandora's database, whose attributes are described in the table below, together with the current song. Which is the song that is most liking to be played next? Euclidean Distance We compute the Euclidean distance between "Welcome To The Jungle" and the other songs, and then we pick the song with the lowest distance: d(S_{Guns}, S_{Pink}) = \sqrt{(5-4.4)^2 + (4.2-5)^2 + (4.6-4)^2 + (5-4.2)^2 + (5-5)^2} = 1.4142 d(S_{Guns}, S_{Toto}) = \sqrt{(5-3.8)^2 + (4.2-4)^2 + (4.6-5)^2 + (5-3)^2 + (5-4.4)^2} = 2.4495 d(S_{Guns}, S_{Houston}) = \sqrt{(5-3.1)^2 + (4.2-3.6)^2 + (4.6-5)^2 + (5-2.2)^2 + (5-4.6)^2} = 3.4828 d(S_{Guns}, S_{Eminem}) = \sqrt{(5-4.5)^2 + (4.2-3)^2 + (4.6-2.8)^2 + (5-2.7)^2 + (5-3.1)^2} = 3.7189 d(S_{Guns}, S_{Eagles}) = \sqrt{(5-4.6)^2 + (4.2-3.5)^2 + (4.6-3.5)^2 + (5-3.5)^2 + (5-3.8)^2} = 2.3558 So we can conclude that using the Euclidean distance, the most likely song to be played is "Money", followed by "Life In The Fast Lane" and "Africa". Manhattan Distance We proceed in the same way as the Euclidean distance, but this time we change the formula to compute the distance: d(S_{Guns}, S_{Pink}) = \vert 5-4.4 \vert + \vert 4.2-5 \vert + \vert 4.6-4 \vert + \vert 5-4.2 \vert + \vert 5-5 \vert = 2.8 d(S_{Guns}, S_{Toto}) = \vert 5-3.8 \vert + \vert 4.2-4 \vert + \vert 4.6-5 \vert + \vert 5-3 \vert + \vert 5-4.4 \vert = 4.4 d(S_{Guns}, S_{Houston}) = \vert 5-3.1 \vert + \vert 4.2-3.6 \vert + \vert 4.6-5 \vert + \vert 5-2.2 \vert + \vert 5-4.6 \vert = 6.1 d(S_{Guns}, S_{Eminem}) = \vert 5-4.5 \vert + \vert 4.2-3 \vert + \vert 4.6-2.8 \vert + \vert 5-2.7 \vert + \vert 5-3.1 \vert = 7.7 d(S_{Guns}, S_{Eagles}) = \vert 5-4.6 \vert + \vert 4.2-3.5 \vert + \vert 4.6-3.5 \vert + \vert 5-3.5 \vert + \vert 5-3.8 \vert = 4.9 The most likely song to be played is still "Money", but now it is followed by "Africa" and then "Life In The Fast Lane". Chebychev Distance Same procedure, we just change the formula to compute the distance: d(S_{Guns}, S_{Pink}) = \max \lbrace \vert 5-4.4 \vert , \vert 4.2-5 \vert , \vert 4.6-4 \vert , \vert 5-4.2 \vert , \vert 5-5 \vert \rbrace = 0 d(S_{Guns}, S_{Toto}) = \max \lbrace \vert 5-3.8 \vert , \vert 4.2-4 \vert , \vert 4.6-5 \vert , \vert 5-3 \vert , \vert 5-4.4 \vert \rbrace = 0.2 d(S_{Guns}, S_{Houston}) = \max \lbrace \vert 5-3.1 \vert , \vert 4.2-3.6 \vert , \vert 4.6-5 \vert , \vert 5-2.2 \vert , \vert 5-4.6 \vert \rbrace = 0.4 d(S_{Guns}, S_{Eminem}) = \max \lbrace \vert 5-4.5 \vert , \vert 4.2-3 \vert , \vert 4.6-2.8 \vert , \vert 5-2.7 \vert , \vert 5-3.1 \vert \rbrace = 0.5 d(S_{Guns}, S_{Eagles}) = \max \lbrace \vert 5-4.6 \vert , \vert 4.2-3.5 \vert , \vert 4.6-3.5 \vert , \vert 5-3.5 \vert , \vert 5-3.8 \vert \rbrace = 0.4 The most likely song to be played is "Money", followed by "Africa" and "I Will Always Love You" together with "Life In The Fast Lane" because they have the same distance. =References= ---- 1 Celma, Oscar. Music Recommendation and discovery 2 Howe, Michael. Pandora’s Music Recommender 3 Jamie Cai, John Francis, Stephen Gheysens. Creating a Hybrid Music Recommendation System from Content and Social-Based Algorithms 4 Pandora’s Website